package com.kamistoat.meimeistore.modulessystem.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kamistoat.meimeistore.apisystem.domain.SysRole;
import com.kamistoat.meimeistore.apisystem.domain.SysUser;
import com.kamistoat.meimeistore.apisystem.entity.SysUserEntity;
import com.kamistoat.meimeistore.commoncore.utils.page.PageUtils;
import com.kamistoat.meimeistore.apisystem.entity.SysRoleEntity;

import java.util.List;
import java.util.Map;

/**
 * 角色信息表
 *
 * @author kamistoat
 * @email linjianshanke@163.com
 * @date 2022-08-09 10:34:46
 */
public interface SysRoleService extends IService<SysRoleEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 根据用户ID查询角色列表.将强制返回与userId严格对应的角色列表
     */
    List<SysRoleEntity> selectRoleList(SysRole sysRole, Long userId);

    List<SysRoleEntity> selectRoleListAll(SysRole sysRole);

    /**
     * 根据userId查询normal状态的角色。
     */
    List<SysRoleEntity> selectRoleListUnderNormal(Long userId);

    /**
     * 查询当前角色是否拥有超级管理员的角色
     */
    boolean isAdminWithUserId(Long userId);

    SysRoleEntity selectRoleByRoleId(Long roleId);

    boolean checkRoleNameUnique(SysRole sysRole);

    boolean checkRoleKeyUnique(SysRole sysRole);

    boolean editExcludeScope(SysRole sysRole);

    /**
     * 修改 data_scope，关联修改
     */
    boolean authDataScope(SysRole sysRole);

    /**
     * 关联修改 菜单权限
     */
    boolean authMenu(SysRole sysRole);

    /**
     * 不断线更新缓存中的 核心信息令牌
     */
    boolean dealWithCoreLoginUser(SysRole sysRole);

    /**
     * 修改角色状态
     */
    boolean updateRoleStatus(SysRole sysRole);

    /**
     * 删除角色.要求当前角色没有与其他用户绑定。
     * 删除时将角色的权限绑定和部门绑定一并删除
     */
    boolean deleteRoleByIds(Long[] roleIds);

    boolean insertAuthUsers(Long roleId, Long[] userIds);

    boolean deleteAuthUsers(Long roleId, Long[] userIds);

    List<SysUserEntity> selectAllocatedUserList(SysUser sysUser);

    List<SysUserEntity> selectUnAllocatedUserList(SysUser sysUser);
}

